Variable - Assembly Language

Prahlad Godara ------ From DOOSEEP

NASM variables reserve storage space for storing any data with a specific name. Whenever there is an instructional need for that data or value, that data can be easily accessed by the name of the variable.

Variable in NASM Assembly Language

Allocating storage space for data

Variable Syntax - of the storage allocation statement for data

[variable-name]    define-directive    initial-value   [,initial-value]...

Where, variable-name is the identifier for each storage location. The assembler adds an offset value to each variable name defined in the data segment.

Allocating Storage Space for Initialized Data

There are five basic forms of the define directive −

Directive Purpose Storage Space
DB Define Byte allocates 1 byte
DW Define Word allocates 2 bytes
DD Define Doubleword allocates 4 bytes
DQ Define Quadword allocates 8 bytes
DT Define Ten Bytes allocates 10 bytes

Following are some examples of using define directives −


    choice		    DB	'P'
    number		    DW	12345
    neg_number   	DW	-12345
    big_number	    DQ	123456789
    real_number1	DD	1.234
    real_number2	DQ	123.456
Please note that −
  1. Each byte of character is stored as its ASCII value in hexadecimal.
  2. Each decimal value is automatically converted to its 16-bit binary equivalent and stored as a hexadecimal number.
  3. Processor uses the little-endian byte ordering.
  4. Negative numbers are converted to its 2's complement representation.
  5. Short and long floating-point numbers are represented using 32 or 64 bits, respectively.

The following program shows the use of define directive −


    section .text
    global _start          ;must be declared for linker (gcc)
     
 _start:                   ;tell linker entry point
    mov	edx,1		  ;message length
    mov	ecx,choice        ;message to write
    mov	ebx,1		  ;file descriptor (stdout)
    mov	eax,4		  ;system call number (sys_write)
    int	0x80		  ;call kernel
 
    mov	eax,1		  ;system call number (sys_exit)
    int	0x80		  ;call kernel
 
 section .data
 choice DB 'P'
            

When the above code is compiled and executed, it produces the following result −

P

Allocating Storage Space for Uninitialized Data

The reserve directives are used for reserving space for uninitialized data. The reserve directives take a single operand that specifies the number of units of space to be reserved. Each define directive has a related reserve directive.

There are five basic forms of the reserve directive −

Directive Purpose
RESB Reserve a Byte
RESW Reserve a Word
RESD Reserve a Doubleword
RESQ Reserve a Quadword
REST Reserve a Ten Bytes

Multiple Definitions

You can have multiple data definition statements in a program. For example −


    choice	  DB 	'a' 		 ;ASCII of y = 79H
    number1	  DW 	12345 	 ;12345D = 3039H
    number2    DD  12345679  ;123456789D = 75BCD15H

The assembler allocates contiguous memory for multiple variable definitions.

Multiple Initializations

The TIMES directive allows multiple initializations to the same value. For example, an array named marks of size 9 can be defined and initialized to zero using the following statement −


Example

    section	.text
    global _start        ;must be declared for linker (ld)
     
 _start:                 ;tell linker entry point
    mov	edx,9		;message length
    mov	ecx, stars	;message to write
    mov	ebx,1		;file descriptor (stdout)
    mov	eax,4		;system call number (sys_write)
    int	0x80		;call kernel
 
    mov	eax,1		;system call number (sys_exit)
    int	0x80		;call kernel
 
 section	.data
 stars   times 9 db 'a'

When the above code is compiled and executed, it produces the following result −

aaaaaaaaa

Read in- Hindi
Tags- Variable - Assembly Language , assembly language, type of Assembly Program Variable, example program in assembly language